package edu.upc.dao.consulta.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import edu.upc.dao.consulta.ConsultaPublicidadDao;
import edu.upc.model.Publicidad;

@Component
public class ConsultaPublicidadDaoImpl implements ConsultaPublicidadDao {

	@Autowired
	private DataSource dataSource;

	public List<Publicidad> obtenerListaPublicidad() {
		String sql = "SELECT id_publi,desc_corta_publi,cuerpo_publi,enlace_publi,fechaInicial_publi,fecha_Fin,estado_publi FROM tb_publicidad";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Publicidad> lst = new ArrayList<Publicidad>();
		try {
			conn = dataSource.getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			lst = mapResult(rs);
		} catch (SQLException e) {
			throw new RuntimeException("SQL exception occurred finding noti by Ofertante", e);
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException ex) {
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException ex) {
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException ex) {
				}
			}
		}
		return lst;
	}

	public List<Publicidad> obtenerListaPublicidadActivo() {
		String sql = "SELECT id_publi,desc_corta_publi,cuerpo_publi,enlace_publi,fechaInicial_publi,fecha_Fin,estado_publi FROM tb_publicidad WHERE estado_publi = 'P'";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Publicidad> lst = new ArrayList<Publicidad>();
		try {
			conn = dataSource.getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			lst = mapResult(rs);
		} catch (SQLException e) {
			throw new RuntimeException("SQL exception occurred finding noti by Ofertante", e);
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException ex) {
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException ex) {
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException ex) {
				}
			}
		}
		return lst;
	}
	
	private List<Publicidad> mapResult(ResultSet rs) throws SQLException {
		List<Publicidad> lstPublicidad=new ArrayList<Publicidad>();
		while(rs.next()){
			Publicidad publicidad = new Publicidad();
			publicidad.setId(rs.getInt("id_publi"));
			publicidad.setDescripcionCorta(rs.getString("desc_corta_publi"));
			publicidad.setCuerpoPublicidad(rs.getString("cuerpo_publi"));
			publicidad.setEnlacePublicidad(rs.getString("enlace_publi"));
			publicidad.setFechaInicio(rs.getDate("fechaInicial_publi"));
			publicidad.setFechaFin(rs.getDate("fecha_Fin"));
			publicidad.setEstado(rs.getString("estado_publi"));
			lstPublicidad.add(publicidad);
		}

		return lstPublicidad;
	}
}
